
// Teper' i s probelom!!!

#include "TXlib.h"

void zizni (int x);

void morganie (int povtorenie);

void closes (int lop);

void open (int lok);

void noch (int  dviz2, int dvigchelgorizzz, int dvigchelverttt);

void den (int dviz1, int dvigchelgorizz, int dvigchelvertt);

void Zastavka ();

void FallingZombie ();

void drawpicture ();

void start ();

void zizn (double dviz, int dvigchelgoriz, int dvigchelvert, int ozid, int povtor, int natpis);

void fon (COLORREF skyColor, COLORREF earthColor, int sx, int sy, int lpx, int lpy, int r, int rpx, int rpy, int mx, int my, int lunarr, int cratersrr);

void zakras ();

void BlB (int povtor);

void SafeTree ();

void SkyEarth (COLORREF EarthColor, COLORREF SkyColor);

void CratersMoon (int x, int y, double lunar, double cratersr);

void Sun (int x, int y, double rsolnce);

void RightPig (int x, int y);

void LeftPig (int x, int y);

void BossGhast ();

void JustCreeper ();

void Skeleton ();

void BadZombie ();

void EpicPlayer (int x, int y);

int main()

{

    txCreateWindow (800, 500);

    start ();

    Zastavka ();

    zizn (0,0,0,0,0,20);

    return 0;

}

 //COLORREF EarthColor COLORREF
    void zizni (int x)
{
    txSetFillColor (TX_RED);
    txSetColor (TX_RED);
    txRectangle (600, 10, x, 30);
}

    void FallingZombie ()
{
    txSetColor (TX_GREEN);
    txLine (400, 200, 415, 195);
    txLine (415, 195, 404, 210);
    txLine (415, 195, 420, 179);
    txLine (420, 179, 430, 187);
    txLine (420, 179, 410, 191);


    txSetColor (TX_RED);
    txLine (418, 190, 410, 183);
    txLine (418, 190, 401, 188);
    txLine (418, 190, 403, 192);
    txLine (418, 190, 405, 180);

}

    void SkyEarth (COLORREF EarthColor, COLORREF SkyColor)
{
    txSetColor (EarthColor);
    txSetFillColor (EarthColor);
    txRectangle (0, 300, 800, 500);
    txSetColor (SkyColor);
    txSetFillColor (SkyColor);
    txRectangle (0,0,800,300);
}

    void Sun (int x, int y, double rsolnce)
{
    txSetColor (TX_YELLOW);
    txSetFillColor (TX_YELLOW);
    txCircle (x, y, rsolnce);
    txLine (x, y - 95, x, 95 + y);
    txLine (x - 95, y, 95 + x, y );
    txLine (x - 70, 70 + y, 70 + x, y - 70);
    txLine (x - 70, y - 70, 70 + x, 70 + y);
}

    void CratersMoon (int x, int y, double lunar, double cratersr)
{
    txSetColor (RGB (213, 219, 219));
    txSetFillColor (RGB (213, 219, 219));
    txCircle (x, y, lunar);

    txSetColor (TX_GRAY);
    txSetFillColor(TX_GRAY);
    txCircle (20 + x, 20 + y, cratersr + 2);
    txCircle (x - 10, y - 10, cratersr);
    txCircle (x - 30, 10 + y, cratersr + 5);

    txCircle (17 + x, y - 20, cratersr + 2);
    txCircle (x - 6, 25 + y, cratersr + 7);
    //txLine (685 + x1 - 100, 265 + y1 - 100, 675 + x1 - 100, 265 + y1 - 100);
}

    void SafeTree ()
{
    txSetFillColor (RGB (185, 122, 87 ));
    txRectangle (200, 301, 220, 200);

    txSetColor (TX_LIGHTGREEN);
    txSetFillColor (TX_LIGHTGREEN);
    txCircle (220, 200, 50);
    txCircle (180, 200, 50);
    txCircle (215, 180, 50);
    txCircle (195, 165, 50);
    txCircle (160, 155, 35);
}

    void RightPig (int x, int y)
{
    txSetFillColor (TX_PINK);
    txSetColor (TX_PINK);
    txRectangle (x, y , 40 + x, y - 20);
    txRectangle (37 + x, y, 32 + x, 10 + y);
    txRectangle (5 + x, y, 10 + x, 10 + y);
    txRectangle (40 + x, y - 15, 45 + x, y - 5);

    txSetColor (TX_BLACK);
    txSetFillColor (TX_BLACK);
    txRectangle (38 + x, y - 18, 34 + x, y - 14);
}

    void LeftPig (int x, int y)
{
    txSetFillColor (TX_PINK);
    txSetColor (TX_PINK);
    txRectangle (x, y, 40 + x, y - 20);
    txRectangle (x, y - 5, x - 5, y - 15);
    txRectangle (37 + x, y, 32 + x, 10 + y);
    txRectangle (5 + x, y, 10 + x, 10 + y);

    txSetColor (TX_BLACK);
    txSetFillColor (TX_BLACK);
    txRectangle (2 + x, y - 18, 6 + x, y - 14);
}

    void BossGhast ()
{
    txSetFillColor (TX_WHITE);
    txSetColor (TX_WHITE);
    txRectangle (595, 100, 500, 200);
    txRectangle (510, 200, 525, 240);
    txRectangle (540, 200, 555, 240);
    txRectangle (570, 200, 585, 240);

    txSetFillColor (TX_BLACK);
    txSetColor (TX_BLACK);
    txRectangle (515, 130, 535, 140);
    txRectangle (565, 130, 585, 140);

    txSetColor (TX_BLACK);
    txCircle (547, 170, 15);

    txSetColor (TX_ORANGE);
    txSetFillColor (TX_ORANGE);
    txCircle (447, 170, 11);

}

    void JustCreeper ()
{
    txSetColor (TX_GREEN);
    txSetFillColor (TX_GREEN);
    txRectangle (400, 260, 410,290);
    txRectangle (397, 260, 413, 240);
    txRectangle (404, 290, 395, 300);
    txRectangle (406, 290, 415, 300);
}

    void Skeleton ()
{
    txSetFillColor (TX_WHITE);
    txSetColor (TX_WHITE);
    txLine (700, 300, 705, 280);
    txLine (705, 280, 710, 300);
    txLine (705, 280, 705, 260);
    txCircle (705, 255, 7);
    txLine (705, 265, 715, 280);
    txLine (705, 265, 687, 265);
    txLine (692, 280, 692, 250);

    txSetFillColor (RGB (145, 94, 51));
    txSetColor (RGB (145, 94, 51));
    txLine (687, 265, 692, 280);
    txLine (687, 265, 692, 250);
}

    void BadZombie ()
{



    txSetColor (RGB(109, 118, 48));
    txLine   (590, 279, 600, 299);
    txLine   (590, 279, 580, 299);
    txLine   (590, 279, 590, 259);
    txCircle (590, 255, 7);
    txLine   (590, 259, 610, 264);
    txLine   (570, 264, 590, 259);
}

    void EpicPlayer (int x, int y)
{

    txSetFillColor (TX_WHITE);
    txSetColor (TX_WHITE);
    txLine (x - 5, y + 20, x, y);          //x=305 y=280
    txLine (x, y, x + 5, y + 20);
    txLine (x, y, x, y - 20);
    txCircle (x, y - 25, 7);
    txLine (x, y - 15, x + 18, y - 15);
    txLine (x, y - 15, x - 10, y);
    txSetFillColor (TX_BLACK);
    txSetColor (TX_BLACK);
    txCircle (x - 3, y - 27, 2);
    txCircle (x + 3, y - 27, 2);

    txSetFillColor (RGB (251, 247, 79));
    txSetColor (RGB (251, 247, 79));
    txRectangle (x + 15, y - 10, x + 20, y - 18);
    txRectangle (x + 20, y - 18, x + 30, y - 15);
}

    void zizn (double dviz, int dvigchelgoriz, int dvigchelvert, int ozid, int povtor, int natpis)
{

    getch ();

    txClear ();

    txTextOut (80, 200, "герой управляется стрелочками на клавиатуре");

    txTextOut (90, 220, "ваша задача выжить отстреливаясь от зомби");

    txTextOut (0, 240, "собирайте монеты и улучшайте своё оружее, чтобы открыть меню нажмите'М'");

    getch();

    while (povtor < 5)
    {


        den (0, dvigchelgoriz, dvigchelvert);

        fon (TX_LIGHTBLUE, TX_GREEN, 400, 100, 620, 300, 50, 20, 300, 1000, 400, 0, 0);

        EpicPlayer (300 + dvigchelgoriz, 300 + dvigchelvert);

    while (ozid < 200)
        {

            zakras ();

            fon (TX_LIGHTBLUE, TX_GREEN, 400, 100, 620, 300, 50, 20, 300, 1000, 400, 0, 0);

            EpicPlayer (300 + dvigchelgoriz, 300 + dvigchelvert);

            txSleep (5);

            if(GetAsyncKeyState(VK_RIGHT))
            {
                dvigchelgoriz = dvigchelgoriz + 1;
            }

            if(GetAsyncKeyState(VK_LEFT))
            {
                dvigchelgoriz = dvigchelgoriz - 1;
            }

            if(GetAsyncKeyState(VK_UP))
            {
                dvigchelvert = dvigchelvert - 80;

                txSetFillColor (TX_BLACK);

                txClear();

                fon (TX_LIGHTBLUE, TX_GREEN, 400, 100, 620, 300, 50, 20, 300, 1000, 400, 0, 0);

                EpicPlayer (300 + dvigchelgoriz, 300 + dvigchelvert);

                txSleep(2000);

                dvigchelvert += 80;
            }
            ozid += 1;
            }

    //sleduyshiperiod

    noch (0, dvigchelgoriz, dvigchelvert);

    fon (TX_BLACK, RGB (11, 87, 15), 1000, 400, 620, 300, 0, 20, 300, 400, 100, 50, 7);

    EpicPlayer (300 + dvigchelgoriz, 300 + dvigchelvert);

    while (ozid < 400)
        {

            zakras ();

            fon (TX_BLACK, RGB (11, 87, 15), 1000, 400, 620, 300, 0, 20, 300, 400, 100, 50, 7);

            EpicPlayer (300 + dvigchelgoriz, 300 + dvigchelvert);

            txSleep (5);

            if(GetAsyncKeyState(VK_RIGHT))
            {
                dvigchelgoriz = dvigchelgoriz + 1;
            }

            if(GetAsyncKeyState(VK_LEFT))
            {
                dvigchelgoriz = dvigchelgoriz - 1;
            }

            if(GetAsyncKeyState(VK_UP))
            {
                dvigchelvert = dvigchelvert - 80;

                fon (TX_BLACK, RGB (11, 87, 15), 1000, 400, 620, 300, 0, 20, 300, 400, 100, 50, 7);

                EpicPlayer (300 + dvigchelgoriz, 300 + dvigchelvert);

                txSleep(2000);

                dvigchelvert += 80;
            }
            ozid += 1;
            }

   ozid = 0;

 }



povtor += 1;

}

    void zakras()
{
    txSetFillColor (TX_BLACK);
    txClear ();
 }

    void fon (COLORREF skyColor, COLORREF earthColor, int sx, int sy, int lpx, int lpy, int r, int rpx, int rpy, int mx, int my, int lunarr, int cratersrr)
{

    SkyEarth (earthColor, skyColor);

    Sun (sx, sy, r);

    LeftPig (lpx, lpy);

    RightPig (rpx, rpy);

    BossGhast ();

    JustCreeper ();

    BadZombie ();

    SafeTree ();

    CratersMoon (mx, my, lunarr, cratersrr);

    Skeleton ();
    }

    void start ()
{

    txTextOut (200, 300, " добро пожаловать в игру'lord of the zombies'");

    txTextOut (240, 320, "что бы начать нажмите любую кнопку");

    EpicPlayer (320, 200);

    FallingZombie ();

}

    void Zastavka ()
{


    getch();
    txClear ();
    txSetColor (TX_WHITE);
    txSetFillColor (TX_BLACK);
    txFloodFill (0,0,TX_BLACK);
    txTextOut (10, 200,"сначала был взрыв, а потом я падал...темнота, пустота, одиночество.");
    txSleep (2000);
    txClear ();
    txTextOut (200, 200, "кто я? Почему я здесь оказался?");
    txSleep (1000);
    txClear ();
    morganie (0);
}

void den (int dviz1, int dvigchelgorizz, int dvigchelvertt)
{
  while (dviz1 < 200)
            {

            zizni (750);

            zakras ();

            SkyEarth (TX_GREEN, TX_LIGHTBLUE);

            Sun (0 + dviz1 * 2, 300 - dviz1 , 0 + dviz1 * 0.25);

            CratersMoon (400 + dviz1 * 3, 100 + dviz1, 50 - dviz1 * 0.23, 7 - dviz1 * 0.05);

            RightPig (20 + dviz1 * 3, 300);

            LeftPig (620 - dviz1 * 3, 300);

            BossGhast ();

            JustCreeper ();

            BadZombie ();

            SafeTree ();

            Skeleton ();

            EpicPlayer (300 + dvigchelgorizz, 300 + dvigchelvertt);

            txSleep (1);

            dviz1++;

        }
}

void noch (int  dviz2, int dvigchelgorizzz, int dvigchelverttt)
{
    while (dviz2 < 200)
        {


        zakras ();

        SkyEarth (RGB (11, 87, 15), TX_BLACK);

        CratersMoon (0 + dviz2 * 2, 300 - dviz2, 0 + dviz2 * 0.23, 0 + dviz2 * 0.05);

        Sun (400 + dviz2 * 3, 100 + dviz2, 50 - dviz2 * 0.3);

        LeftPig (620 - dviz2 * 3, 300);

        RightPig (20 + dviz2 * 3, 300);

        BossGhast ();

        JustCreeper ();

        BadZombie ();

        SafeTree ();

        Skeleton ();

        EpicPlayer (300 + dvigchelgorizzz, 300 + dvigchelverttt);

        txSleep (1);

        dviz2++;

        }
}

void open (int lok)
{
    while (lok<100)
        {
            txSetFillColor (TX_BLACK);
            txClear ();
            txSetFillColor (TX_LIGHTBLUE);
            txEllipse (50, 250 + lok, 750, 250 - lok);
            lok++;
            txSleep (10);
        }

}
void closes (int lop)
{
    while (lop>0)
        {
            txSetFillColor (TX_BLACK);
            txClear ();
            txSetFillColor (TX_LIGHTBLUE);
            txEllipse (50, 250 + lop, 750, 250 - lop);
            lop -= 1;
            txSleep (10);
        }
}
void morganie (int povtorenie)
{
  while (povtorenie < 3)
    {
        open (0);
        txSleep (200);
        closes (100);
        povtorenie++;
        txSleep (500);
    }
}

